我有两条单独的线路被合并到一条线路上。问题是,目前,它被一个空格隔开。我想知道如何用制表符间距将两行分成一行。
这是我目前拥有的代码:
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/10622916forsed
的N
命令。
将命令替换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:
行。)