簡體   English   中英

將awk輸出打印到新列中

[英]Print awk output into new column

我修改了許多文件(過濾后),我需要將NR和有關新文件的字符打印到列中-讓我們看示例:

input files: x1, x2, x3, y1, y2, y3, z1, z2, z3 ...

腳本:

for i in x* y* z*

 do awk -v h=$i 'END{c+=lenght+1 ;print h "\t" NR "\t" c}' >> stats.txt

done;

我的輸出看起來像:

x1 NR c
x2 NR c
x3 NR c
y1 NR c
y2 NR c
y3 NR c
z1 NR c
z2 NR c
z3 NR c

而且我需要將每個循環保存到新列中無行:

x1 NR c y1 NR c z1 NR c

x2 NR c y2 NR c z2 NR c

x3 NR c y3 NR c z3 NR c

將相應文件(過濾后)保留在同一行上。 我希望我清楚。 我需要在BASH和AWK中執行此操作。 感謝您的任何幫助!!

編輯:

實際輸出如下所示:

    x   0.457143    872484
    y   0.527778    445759
    z   0.416667    382712
    x   0.457143    502528
    y   0.5         575972
    z   0.444444    590294
    x   0.371429    463939
    y   0.694444    398033
    z   0.56565     656565
    .
    .
    .

我需要:

x 0.457143  872484 0.457143 502528 0.371429 463939
y 0.52777   445759 0.5      575972 0.694444 398033
.
.
.

我希望很清楚。

嘗試這個:

cat data | tr -d , | awk '{for (i = 1; i <= NF; i += 3) print $i " NR c " $(i+1) " NR c " $(i+2) " NR c"}'

輸出:

x1 NR c x2 NR c x3 NR c
y1 NR c y2 NR c y3 NR c
z1 NR c z2 NR c z3 NR c

相同的表但已轉置(針對您的任務變型):

cat data | tr -d , | awk '{for (i = 1; i <= NF/3; i += 1) print $i " NR c " $(i+3) " NR c " $(i+6) " NR c"}'

輸出:

x1 NR c y1 NR c z1 NR c
x2 NR c y2 NR c z2 NR c
x3 NR c y3 NR c z3 NR c


對於您的任務更新,請檢查以下解決方案(使用bash ):

cat data | sort | while read L;
do
  y=`echo $L | cut -f1 -d' '`;
  {
    test "$x" = "$y" && echo -n " `echo $L | cut -f2- -d' '`";
  } ||
  {
    x="$y";echo -en "\n$L";
  };
done

(從我的類似問題的解決方案中)

評論后更新了腳本:

sort data | while read L 
do
  y="`echo \"$L\" | cut -f1 -d' '`"
  if [ "$x" = "$y" ]
  then
    echo -n " `echo \"$L\" | cut -f2- -d' '`"
  else
    x="$y"
    echo -en "\n$L"
  fi
done

暫無
暫無

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

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