输入文件:
$ 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.请提出你的意见.
这是一种方法:
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)