在bash中格式化文本文件 - 添加新行,更改列中数字的符号等

时间:2014-03-27 15:11:47

标签: bash sed awk formatting

我非常感谢您就以下问题提出的任何意见。如果这篇文章中有太多问题,请提前道歉。

我有3列(制表符分隔)和n行的文本文件。我想:

  • 切换行和列(我使用下面的脚本完成)
  • 每行添加3列零
  • 切换第1行和第2行
  • 更改新设置的第2行(原始第2列)中的数字符号

在一个脚本中(如果可能)。

或者来自具有以下格式的文件:

1 2 3  
1 2 3  
1 2 3  
1 2 3   
.....

我想得到:

0 0 0 2 2 2 2 ...  
0 0 0 -1 -1 -1 -1...  
0 0 0 3 3 3 3 ...

切换行&列:

awk '
{
     for (i=1; i<=NF; i++)  {
     a[NR,i] = $i
}
}
NF>p { p = NF }
END {
for(j=1; j<=p; j++) {
    str=a[1,j]
    for(i=2; i<=NR; i++){
        str=str" "a[i,j];
    }
    print str
}
}' "$WD"/grads > "$WD"/vect

提前感谢您的帮助 最好,
[R

1 个答案:

答案 0 :(得分:1)

您可以做几件事,例如:

awk '
  NF>n{
    n=NF
  }
  {
    A[1,NR]=-$1
    for(i=2; i<=NF; i++) A[i,NR]=$i
  } 
  END{
    for(i=2; i<=n; i=(i==2)?1:(i==1)?3:i+1) {
      for(j=1; j<=NR; j++) $j=A[i,j]
      print 0,0,0,$0
    }
  }
' file