我有一个如下格式的文本文件。第一行是“KEY”,第二行是“VALUE”。

KEY 4048:1736 string
3
KEY 0:1772 string
1
KEY 4192:1349 string
1
KEY 7329:2407 string
2
KEY 0:1774 string
1

我需要这个值和键在同一行。所以输出应该是这样的…

KEY 4048:1736 string 3
KEY 0:1772 string 1
KEY 4192:1349 string 1
KEY 7329:2407 string 2
KEY 0:1774 string 1

如果我可以使用一些分隔符,如$或:

KEY 4048:1736 string , 3

我如何将两条线合并成一条?


当前回答

虽然前面的解决方案似乎可以工作,但如果文档中出现一个异常,输出就会支离破碎。下面稍微安全一点。

sed -n '/KEY/{
N
s/\n/ /p
}' somefile.txt

其他回答

粘贴很适合这个工作:

paste -d " "  - - < filename
nawk '$0 ~ /string$/ {printf "%s ",$0; getline; printf "%s\n", $0}' filename

这读起来是

$0 ~ /string$/  ## matches any lines that end with the word string
printf          ## so print the first line without newline
getline         ## get the next line
printf "%s\n"   ## print the whole line and carriage return

杀死一只狗的方法不止绞刑。[1]

awk '{key=$0; getline; print key ", " $0;}'

在引号内放入您喜欢的任何分隔符。


引用:

原本是“Plenty of ways to skin the cat”,后来变成了一个古老的、可能起源于宠物的表达,也和宠物无关。

在我需要合并两行(为了更容易处理),但允许数据超过特定的情况下,我发现这是有用的

data.txt

string1=x
string2=y
string3
string4
cat data.txt | nawk '$0 ~ /string1=/ { printf "%s ", $0; getline; printf "%s\n", $0; getline } { print }' > converted_data.txt

然后输出如下:

converted_data.txt

string1=x string2=y
string3
string4

最简单的方法是:

删除偶数行,并将其写入某个临时文件1。 删除奇数行,并将其写入某个临时文件2。 使用粘贴命令和-d(表示删除空格)将两个文件合并为一个文件

Sed '0~2d'文件> 1 && & Sed '1~2d'文件> 2 && &粘贴-d " " 1 2