Board logo

主題: [求助]文字檔案處理 [打印本頁]

發表人: pcca    時間: 2014-10-8 11:27 AM     主題: [求助]文字檔案處理

我現在有一個狀況, 一個文字檔案, 內容如下:

abc@example.com sales@yahoo.com,sales@gmail.com,contact@gmail.com
joe9976@example.com admin@abc_tech.com,hotimg@twedk.org
peter@hotmail.com tinypic@gmail.com,pillowangel@mediafire.com,imm@abc.com,debi@hotmail.com

我要變成:

abc@example.com sales@yahoo.com
abc@example.com sales@gmail.com
abc@example.com contact@gmail.com
joe9976@example.com admin@abc_tech.com
joe9976@example.com hotimg@twedk.org
peter@hotmail.com tinypic@gmail.com
peter@hotmail.com pillowangel@mediafire.com
peter@hotmail.com imm@abc.com
peter@hotmail.com debi@hotmail.com

求助!!
發表人: Observer    時間: 2014-10-8 12:05 PM

我自己慣用的軟體的話
笨方法如下

我會用 Ultraedit  的 十六進位編輯 (HEX) 模式
將逗號(2c)跟空白(20)取代 成 0D 0A

這樣就會把所有資料都分行
存成 txt 檔之後

用 excel 或 access 匯入,然後再排序
排序後再匯出
發表人: XDR    時間: 2014-10-8 01:36 PM

用WORD
把 , 還有 ^w
用 ^p 取代
再丟進 excel排序
發表人: pcca    時間: 2014-10-8 02:38 PM

有點麻煩, 因為其實這只是我整個要處理的東西其中的一部份
中間會跨伺服器... 所以想寫個 script 自動化一下。
發表人: 陽だまり    時間: 2014-10-9 12:12 PM

需要更進一步的功能就請自已處理了

CODE:
[Copy to clipboard]
<textarea name="input" rows="10" cols="100"><br>
<textarea name="output" rows="10" cols="100"></textarea>
<input type="button" value="go" onclick="go()">

<script>
function go(){
  var inputText  = document.getElementsByName("input")[0].value
  var outputText = ""
  var inputArray = inputText.split("\n")
  for(var i=0;i<inputArray.length;i++){
    var thisArray  = inputArray[i].split(" ")
    var leftArray  = thisArray[0]
    var rightArray = thisArray[1].split(",")
    for(var j=0;j<rightArray.length;j++){
      outputText += leftArray + " " + rightArray[j] + "\n"
    }
  }
  document.getElementsByName("output")[0].value = outputText
}
</script>

發表人: pcca    時間: 2014-10-9 01:45 PM

五體投地, 一堆神人! 先謝謝大家!

也拜託朋友幫忙, 他給的答案:

CODE:
[Copy to clipboard]
BEGIN {FS="[ ,]" }
{
head=$1
for(i=2;i<=NF;i++)
        print head,$i

}
存成 pcca.awk

然後
$ awk -f pcca.awk your_data_file
發表人: x13    時間: 2015-4-11 08:17 AM

既然是linux
先決定你的資料會不會到 windows 上,不會就用LF
CRLF ( \r\n ) ( 0x0D 0x0A )
LF ( \n ) ( 0x0A )

第一個方法
tr ',' '\n'  < file

第二個方法
sed 's/\,/\n/g' file


都是一行
發表人: hauha    時間: 2015-10-17 08:52 PM

1. 把資料存成文字檔案, 如twed2k.txt
2. 在Linux下編輯twed2k.sh, 內容如下
#=========================================
#!/bin/sh

INPUT="twed2k.txt"
INPUT1=`cat $INPUT | awk '{print $1}' | xargs`

for a in $INPUT1
do
    b1=`cat $INPUT | grep $a | awk '{print $2}' | sed "s/,/ /g"`
    for b in $b1
    do  
        echo $a $b
    done
done
#=========================================
3. chmod 700 twed2k.txt
4. ./twed2k.sh

執行結果:
hauha@ubuntu:~# cat twed2k.txt
abc@example.com sales@yahoo.com,sales@gmail.com,contact@gmail.com
joe9976@example.com admin@abc_tech.com,hotimg@twedk.org
peter@hotmail.com tinypic@gmail.com,pillowangel@mediafire.com,imm@abc.com,debi@hotmail.com
hauha@ubuntu:~# ./twed2k.sh
abc@example.com sales@yahoo.com
abc@example.com sales@gmail.com
abc@example.com contact@gmail.com
joe9976@example.com admin@abc_tech.com
joe9976@example.com hotimg@twedk.org
peter@hotmail.com tinypic@gmail.com
peter@hotmail.com pillowangel@mediafire.com
peter@hotmail.com imm@abc.com
peter@hotmail.com debi@hotmail.com
發表人: pcca    時間: 2015-12-28 10:17 AM


發表人: 小坦克    時間: 2018-8-9 11:27 AM

學vim用macro很方便
發表人: alexanita    時間: 2018-8-11 09:11 AM

#!/bin/sh

# 輸入資料文字檔案來源 input_data.txt
# abc@example.com sales@yahoo.com,sales@gmail.com,contact@gmail.com
# joe9976@example.com admin@abc_tech.com,hotimg@twedk.org
# peter@hotmail.com tinypic@gmail.com,pillowangel@mediafire.com,imm@abc.com,debi@hotmail.com
#

#Input Text File Name 輸入檔案名稱
input_file=input_data.txt

IFS=$'\r\n'
head_email_array=( $(cat ${input_file} | cut -d' ' -f1) )

for head_email_item in ${head_email_array[@]}
do
    IFS=$'\ '
    body_email_array=( $(grep ${head_email_item} ${input_file} | cut -d' ' -f2 | sed -e 's/,/\ /g') )
    for body_email_item in ${body_email_array[@]}
    do
        # 輸出所要結果
        echo "${head_email_item} ${body_email_item}"
    done
done




歡迎光臨 TWed2k (http://twed2k.org/) Powered by Discuz! 4.1.0