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

在bash中格式化文本文件-添加新行、更改列中数字的符号等,bash,sed,awk,formatting,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列(制表符分隔)和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
awk'
{
对于(i=1;ip{p=NF}
结束{

对于(j=1;j您可以做几件事,例如:

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
awk'
NF>n{
n=NF
}
{
A[1,NR]=-$1

对于(i=2;i当你说“更改第二列中数字的符号”时,你是指从原始列还是从行?对不起,我的意思是更改新设置的第二行(原始第二列)中数字的符号.Thankst具有该输入的awk脚本不会生成该输出。这是您需要帮助修复的错误,还是示例输出错误?@EtanReisner,该脚本在切换行和列时效果良好