用awk-last line问题排到列

时间:2018-05-24 08:46:07

标签: awk

我有几个文件夹,每个文件夹都包含一个文本文件,我将在Bash中进行转置(将行转换为列)。我在for循环中用awk设置了这个,但是我的最后一行有一个问题,它永远不能正确转置。

这是我的input.txt

ID1 11208   13391   16070   19383
ID2 6691    8489    8723    7493
ID3 5768    6004    7754    7614

这是我的output.txt,错误。

ID1 ID2 ID3
11208   6691    5768
13391   8489    6004
16070   8723    7754
19383       
7493    
7614    

这就是我想要的

ID1 ID2 ID3
11208   6691    5768
13391   8489    6004
16070   8723    7754
19383   7493    7614

我的一个班轮是:

input.txt | awk '{for(i=1; i<=NF; i++) A[i]=A[i] (NR>1?OFS:x) $i} END{for(i=1; i<=NR; i++) print A[i]}' OFS="\t" > output.txt

提前感谢您的所有时间

1 个答案:

答案 0 :(得分:1)

关注awk可能会对您有所帮助。

awk '
!a[$1]++{
  val=val?val OFS $1:$1}
{
  for(i=2;i<=NF;i++){
    b[FNR,i]=$i}
}
END{
  print val;
  for(j=2;j<=NF;j++){
    for(k=1;k<=FNR;k++){
      printf("%s%s",b[k,j],k==FNR?ORS:OFS)}
}}
'   Input_file

编辑: 感谢@jas指出这一点:

@OP:如果您有DOS结束行,请点击此处:

cat -v Input_file

如果您看到控制M字符,请执行以下操作以删除它们。

tr -d '\r' < Input_file > temp_file && mv temp_file Input_file