簡體   English   中英

使用帶有awk的paste命令

[英]Using the paste command with awk

我的腳本的目的是將每個文本文件的第二列放在一個目錄中,並將結果粘貼到一個文本文件中。

例如,如果我有三個格式為的文本文件:

 age 30

 gender m

 weight 200

我想要輸出

 age 30 40 50

 gender m m f.

 weight 200 194 143

這是我目前的代碼:

 !/bin/csh
 set z = "e"

 foreach y (*.txt)


 if ($z == "e") then

 echo "creating first columns for $y"

 awk '{print $1}' $y  > $SUBJECTS_DIR/vol_files/$y:r_rhvol.txt

 else

 echo "first columns have already been created for $y"

 endif


 echo "now adding the data for $y"

 set v = (awk '{print $2}' $y) 

 paste $v >> $SUBJECTS_DIR/vol_files/$y:r_rhvol.txt

 set z = "f"
 end

謝謝!

這里有一個讓我在娛樂的時候娛樂:

$ join foo <(join foo foo )
age 30 30 30

gender m m m

weight 200 200 200

這是awk中的一個:

$ awk '{a[$1]=a[$1] (a[$1]==""?"":OFS) $2}END{for(i in a)print i, a[i]}' foo foo foo

age 30 30 30
weight 200 200 200
gender m m m

解釋:

$ awk '
{ a[$1]=a[$1] (a[$1]==""?"":OFS) $2 }  # hash on the first field and append append
END { for(i in a)                      # after all files hashed
          print i, a[i] }              # print (in random order, though)
' foo foo foo

使用paste + awk管道的簡短解決方案,用於具有已知結構的多個文件。

假設我們有5個文件(可能更多):

paste $SUBJECTS_DIR/vol_files/*.txt | awk '{for(i=3;i<=NF;i+=2) $i=""}1'

示例輸出:

age 30  40  50  60  70
gender m  m  f.  e  g
weight 200  194  143  300  400

awk '{for(i=3;i<=NF;i+=2) $i=""}1' - 從連接的行中刪除重復的標題列age , gender ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM