Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在第1列中查找特定关键字,并在第2列shell脚本中追加新行_Bash_Shell_Awk_Sed - Fatal编程技术网

Bash 在第1列中查找特定关键字,并在第2列shell脚本中追加新行

Bash 在第1列中查找特定关键字,并在第2列shell脚本中追加新行,bash,shell,awk,sed,Bash,Shell,Awk,Sed,我有一个文本文件,如下所示: empty 2 23 8 19 1 empty 11 如果第1列有关键字“empty”,我将尝试在第2列追加新行。有人知道怎么做吗?以下是预期输出: empty 23 2 19 8 empty 11 1 awk救援 $ awk 'p{t=$2;$2=p;p=t} $1=="empty"{if($2!=""){p=$2;$2=""}}1' f

我有一个文本文件,如下所示:

 empty      2
 23         8
 19         1
 empty
 11
如果第1列有关键字“empty”,我将尝试在第2列追加新行。有人知道怎么做吗?以下是预期输出:

 empty      
 23         2
 19         8
 empty
 11         1 

awk
救援

$ awk 'p{t=$2;$2=p;p=t} $1=="empty"{if($2!=""){p=$2;$2=""}}1' file

empty                                                                                                                        
23 2
19 8
empty 
11 1

awk
救援

$ awk 'p{t=$2;$2=p;p=t} $1=="empty"{if($2!=""){p=$2;$2=""}}1' file

empty                                                                                                                        
23 2
19 8
empty 
11 1

以下是gnu awk的脚本:

{ col1[ FNR ] = $1
  col2[ FNR ] = sprintf("%s %s",$2, $3)
}

END {
  k2 = 0;
  for( k1 = 1; k1 <= FNR; k1++) {
      if( col1[ k1 ] != "empty" ){
         k2++
         print col1[ k1], col2[ k2]
      }
      else print col1[ k1]
  }
}
{col1[FNR]=$1
col2[FNR]=sprintf(“%s%s”,$2,$3)
}
结束{
k2=0;

对于(k1=1;k1,这里有一个gnu awk脚本:

{ col1[ FNR ] = $1
  col2[ FNR ] = sprintf("%s %s",$2, $3)
}

END {
  k2 = 0;
  for( k1 = 1; k1 <= FNR; k1++) {
      if( col1[ k1 ] != "empty" ){
         k2++
         print col1[ k1], col2[ k2]
      }
      else print col1[ k1]
  }
}
{col1[FNR]=$1
col2[FNR]=sprintf(“%s%s”,$2,$3)
}
结束{
k2=0;

对于(k1=1;k1您能澄清一下吗?您所要求的内容与您的“Before”和“After”图片不匹配:。在第2列添加换行符将"“2”在单独的一行上,它不会导致它向下推“8”和“1”。您的“之后”图片表明您确实希望将文件视为列,而不是行。是的,您是对的,Greg。我希望将此文件也保留为列。就像输出文件中所述。有什么想法吗?谢谢。您能澄清一下吗?您要求的是什么与“Before”和“After”图片不匹配:。将换行添加到第2列将导致“'2'在单独的一行上,它不会导致它向下推'8'和'1'。您的'After'图片表明您确实希望将文件视为列,而不是行。是的,您是对的,Greg。我希望将此文件也保留为列。就像输出文件上所述。有什么办法吗?谢谢,是的,它适用于3”空”第一栏的单词!但是,如果我们有更多的“空”怎么办第1列的单词?因为它会跳过第2列的一些值。非常感谢!我真的很喜欢它。请发布一个测试输入,我不确定我是否理解你的意思。测试输入实际上由3列组成。我想像前面提到的那样处理它。我通过以下链接粘贴了它:谢谢!是的,它适用于3“空”第一栏的单词!但是,如果我们有更多的“空”怎么办第1列的单词?因为它会跳过第2列的一些值。非常感谢!我真的很喜欢它。请发布一个测试输入,我不确定我是否理解你的意思。测试输入实际上由3列组成。我想像我前面提到的那样处理它。我通过以下链接粘贴了它:谢谢!