Bash awk:将第一行转换为第一列,将第二行转换为第二列

Bash awk:将第一行转换为第一列,将第二行转换为第二列,bash,shell,awk,Bash,Shell,Awk,我有一个包含如下数据的文件: { MAG 121/002 Wed Mar 14 00:00:00 2018 MAG 121/003 Wed Mar 14 00:00:00 2018 MAG 121/004 Wed Mar 14 00:00:00 2018 } 我希望输出为: { MAG 121/002 | Wed Mar 14 00:00:00 2018 MAG 121/003 | Wed Mar 14 00:00:00 2018 } 等等。。感谢您的帮助 我尝试的是: cat <fi

我有一个包含如下数据的文件:

{
MAG 121/002
Wed Mar 14 00:00:00 2018
MAG 121/003
Wed Mar 14 00:00:00 2018
MAG 121/004
Wed Mar 14 00:00:00 2018
}
我希望输出为:

{
MAG 121/002 | Wed Mar 14 00:00:00 2018
MAG 121/003 | Wed Mar 14 00:00:00 2018
}
等等。。感谢您的帮助

我尝试的是:

cat <filename> | awk '{printf "%s" (NR%2==0? RS:FS), $1}'
cat | awk'{printf“%s”(NR%2==0?RS:FS),$1}'

请尝试以下内容,并告诉我这是否有帮助

awk '/{/||/}/{print;next} /MAG/{val=$0;getline;print val OFS $0}' OFS=" | "  Input_file

请您尝试以下内容,并让我知道这是否有帮助

awk '/{/||/}/{print;next} /MAG/{val=$0;getline;print val OFS $0}' OFS=" | "  Input_file
sed解决方案:

echo "MAG 121/002
Wed Mar 14 00:00:00 2018
MAG 121/003
Wed Mar 14 00:00:00 2018
MAG 121/004
Wed Mar 14 00:00:00 2018" | tr "\n" "|" | sed 's/|/ | /g' | sed -r 's/([^|]+\|[^|]+)\| /\1\n/g'
MAG 121/002 | Wed Mar 14 00:00:00 2018 
MAG 121/003 | Wed Mar 14 00:00:00 2018 
MAG 121/004 | Wed Mar 14 00:00:00 2018 
sed解决方案:

echo "MAG 121/002
Wed Mar 14 00:00:00 2018
MAG 121/003
Wed Mar 14 00:00:00 2018
MAG 121/004
Wed Mar 14 00:00:00 2018" | tr "\n" "|" | sed 's/|/ | /g' | sed -r 's/([^|]+\|[^|]+)\| /\1\n/g'
MAG 121/002 | Wed Mar 14 00:00:00 2018 
MAG 121/003 | Wed Mar 14 00:00:00 2018 
MAG 121/004 | Wed Mar 14 00:00:00 2018 
阅读并回应:

echo "MAG 121/002
Wed Mar 14 00:00:00 2018
MAG 121/003
Wed Mar 14 00:00:00 2018
MAG 121/004
Wed Mar 14 00:00:00 2018" | while read line ; do case $line in MAG*) echo -n $line "| " ;; *) echo $line ;; esac ; done 
MAG 121/002 | Wed Mar 14 00:00:00 2018
MAG 121/003 | Wed Mar 14 00:00:00 2018
MAG 121/004 | Wed Mar 14 00:00:00 2018
代码格式:

while read line
do
  case $line in 
    MAG*) echo -n $line "| " ;; 
       *) echo $line ;; 
  esac
done 
阅读并回应:

echo "MAG 121/002
Wed Mar 14 00:00:00 2018
MAG 121/003
Wed Mar 14 00:00:00 2018
MAG 121/004
Wed Mar 14 00:00:00 2018" | while read line ; do case $line in MAG*) echo -n $line "| " ;; *) echo $line ;; esac ; done 
MAG 121/002 | Wed Mar 14 00:00:00 2018
MAG 121/003 | Wed Mar 14 00:00:00 2018
MAG 121/004 | Wed Mar 14 00:00:00 2018
代码格式:

while read line
do
  case $line in 
    MAG*) echo -n $line "| " ;; 
       *) echo $line ;; 
  esac
done 

你为自己做了什么?伊尼安的评论和我的答案有几秒钟的差异,所以我留下来回答伊尼安的问题,然后我将撤销我对帖子的删除。我尝试的是:cat | awk'{printf“%s”(NR%2==0?RS:FS),$1}MAG 121/002 Sun MAG 121/003与sed:
sed'/MAG/{N;s/\N/}'文件
你为自己做了什么?伊尼安的评论和我的回答有几秒钟的差异,所以我留下来回答伊尼安的问题,然后我将撤销我对帖子的删除。我尝试的是:cat | awk'{printf“%s”(NR%2==0?RS:FS),$1}'MAG 121/002 Sun MAG 121/003与sed:
sed'/MAG/{N;s/\N/}'文件
@Kannan,请现在试试,让我知道这是否对你有帮助?@Kannan,请现在试试,让我知道这是否对你有帮助?最好不要在不需要的地方提交多个答案。这个答案应该与你的另一个答案相结合,在大致相似的背景下强调每一个答案都是一个可供选择的解决方案。为什么?他们彼此独立。你可以投这个反对票,那个反对票,两个反对票,两个反对票,或者两个反对票,或者两个都反对票,或者两个都不反对票。最好不要在不需要的地方提交多个答案。这个答案应该与你的另一个答案相结合,在大致相似的背景下强调每一个答案都是一个可供选择的解决方案。为什么?他们彼此独立。你可以投这个反对票,投那个反对票,投两个反对票,投两个反对票,也可以投两个反对票,或者两者都投,或者两者都投,或者两者都投。