2014-09-30 76 views
1

我想將文本追加到現有文件每行的末尾。該文本必須從文件的第一行添加到最後一行。通過循環將文本從第一行附加到文件的最後

問題是,我將文件內容作爲輸入傳遞給循環,並且必須將其輸出附加到同一個文件中。我無法弄清楚它的邏輯。

文件名:樣品

cat sample 
Alex, Johston 
Samuel, John 
Vebron, Justus 

以上是該文件的內容。現在,在這裏,我想把第一列值,即Alex),Samuel和Verbron附加到文件的末尾,用逗號。

我intented輸出:

Alex, Johston,Alex 
Samuel, John,Samuel 
Vebron, Justus,Vebron 

我的劇本我寫了拿第一列的值:

while 
read LINE 
do 
fcol=$(echo $LINE|awk -F, '{ print $1 }') 
done < sample 

通過上述循環運行,變量fcol將存儲的值 - 亞歷克斯,薩穆埃爾,韋布龍。我需要將這些值附加到每行的末尾

有人可以在此指導我,以便我可以更改上述代碼以獲得如上所述的輸入輸出。

謝謝!

+0

@Rehman巴沙和@ nu11p01n73R:是的,可以通過它來完成。但是,我想採取我想要的邏輯。好吧,我會再提供一個樣本:' read do fcol = $(echo $ LINE | awk -F,'{print $ 1}') wget -o wgetlog --output-document = genderinfo.html「 http://gendersay.com/username=$fcol「 gender = $(grep -o --perl-regexp」(?<= genderinformation,value:gend _)[a-zA-Z0-9 _] +「genderinfo。 html done user3624000 2014-09-30 18:23:18

+0

通過上述循環運行將獲取'fcol'值的性別信息 - Alex,Samuel,Vebron。現在我需要在每行的末尾添加「gender」的值並相應地添加。過程必須從第一行開始到最後一行 – user3624000 2014-09-30 18:25:14

+0

@Rehman Basha:你們能幫我解決上面的問題嗎? – user3624000 2014-09-30 18:26:32

回答

0

初始化在循環遍歷文件之前使用line_no = 0

line_no遞增1處理每個行之前:

下面的sed命令將$fcol附加在$line_no
sed -i "$line_no s/$/ ,$fcol/" sample

最終腳本的末尾:

line_no=0 

while read LINE 
do 
line_no=$((line_no+1)) 
fcol=$(echo $LINE|awk -F, '{ print $1 }') 
sed -i "$line_no s/$/ ,$fcol/" sample 
done < sample 
+0

根據您在上述評論中提供的示例,您只需將fcol替換爲我猜測的性別即可。 – RBH 2014-10-01 14:46:02

+0

我試着用上面的代碼。所有的'fcol'值都被附加到第一行本身。我得到的輸出是這樣的:'貓樣 亞歷克斯,Johston,阿萊士,薩穆埃爾,韋布龍 塞繆爾,約翰 韋布龍,Justus' – user3624000 2014-10-02 07:01:34

+0

我覺得LINE_NO = $((N + 1))沒有增加.. – user3624000 2014-10-02 07:02:51

1

如果沒有某種中間文件(在處理文件之前沒有將文件內容存儲在內存中),您無法做到這一點。那說像sed -i這樣的東西會隱藏你的細節。

awk -F, -v OFS=, '{print $0,$1}' sample > sample.new 

sed -i.orig -e 's/^\(.\)\(.*\)/&\1/' sample 
3

awk -F, '{print $0", "$1}' sample

環路作爲AWK需要從它根據所提供的命令輸入文件和過程中的每個線不是必需的。

這裏的命令是print $0", "$1其中具有","追加$0$1它們之間

+0

'print $ 0,','$ 1'(如解釋中所示)將打印出',',而不是'print $ 0','$ 1'(如第一行),將打印出','。 ......這大部分只是說解釋有一個錯誤的很長的路。 – 2014-09-30 18:19:24

1

你可以使用awk來做到這一點:

cat sample |awk -F "," '{print $0 ", "$1}' 
0

我的解決辦法是

sed -r 's/([^,]*).*/\0, \1/' 
相關問題