仅当field-1与sed或awk等于时才加入2行

use*_*891 -2 awk sed

输入文件:

$ cat t.txt
id1;value1_1
id1;value1_2
id2;value2_1
id3;value3_1
id4;value4_1
id4;value4_2
id5;value5_1
Run Code Online (Sandbox Code Playgroud)

结果将是:

id1;value1_1;id1;value1_2
id3;value3_1
id4;value4_1;id4;value4_2
id5;value5_1
Run Code Online (Sandbox Code Playgroud)

使用sed或awk.请提出你的意见.

Mic*_*ski 6

这是一种方法:

awk -F';' 'BEGIN { getline; id=$1; line=$0 } { if ($1 != id) { print line; line = $0; } else { line = line ";" $0; } id=$1; } END { print line; }' t.txt
Run Code Online (Sandbox Code Playgroud)

说明:

将字段分隔符设置为;:

-F';'
Run Code Online (Sandbox Code Playgroud)

首先读取input(getline)的第一行,将第一个字段($1)保存为id,并将第一行($0)保存为line:

BEGIN { getline; id=$1; line=$0 }
Run Code Online (Sandbox Code Playgroud)

对于每行输入,检查第一个字段是否与存储的ID不同:

if ($1 != id)
Run Code Online (Sandbox Code Playgroud)

如果是,则打印保存的行并存储新的行($0):

print line; line = $0;
Run Code Online (Sandbox Code Playgroud)

否则,将新行追加到存储的行:

line = line ";" $0;
Run Code Online (Sandbox Code Playgroud)

并保存新的ID:

id=$1
Run Code Online (Sandbox Code Playgroud)

最后,打印剩下的内容line:

END { print line; }
Run Code Online (Sandbox Code Playgroud)