如何在 bash 中的 awk / sed 命令之间添加制表符空格

如何在 bash 中的 awk / sed 命令之间添加制表符空格

我有两条单独的线路被合并到一条线路上。问题是,目前,它被一个空格隔开。我想知道如何用制表符间距将两行分成一行。

这是我目前拥有的代码:

awk '/^loginName:/{x=NR+1}(NR<=x){print}'\t FinalResults.txt| sed "N;s/\n/ /g"

我看到 tab 命令是%\t,但是它到底会去哪里呢?另外,您能否分解当前的编码并详细解释一切的作用以及目的是什么,因为我正在尝试学习 bash 的工作原理。

附加信息:该问题与此答案相关:https://unix.stackexchange.com/a/502156/330217。输入文件FinalResults.txt与另一个问题中所示的相同。

答案1

awk脚本打印以 开头的所有行loginName:以及紧随其后的下一行,无论其内容如何。

/^loginName:/{x=NR+1} # for matching lines store the record (line) number +1 into x
(NR<=x){print} # The condition will be true for the line matching the pattern above and the following line.

sed阅读和的文档awk。看https://stackoverflow.com/q/6255796/10622916forsedN命令。

将命令替换sed

 sed "N;s/\n/\t/g"

用 Tab 而不是空格分隔行。

或者更改awk脚本

awk '/^loginName:/{x=NR+1;l=$0}NR==x{print l "\t" $0}' FinalResults.txt

并省略该sed命令。
如果你想要更短

awk 'l{print l"\t"$0;l=0}/^loginName:/{l=$0}' FinalResults.txt

但较短的脚本可能更难以理解。
(这里打印的条件是非l空且 not的值0,并l存储该loginName:行。)

相关内容