我有一个文件在下面
1234|A|B|C|10|11|12
2345|F|G|H|13|14|15
3456|K|L|M|16|17|18
我想要的输出
1234|A
1234|B
1234|C
2345|F
2345|G
2345|H
3456|K
3456|L
3456|M
我试过用下面的脚本。
awk -F"|" '{print $1","$2","$3","$4"}' file.dat | awk -F"," '{OFS=RS;$1=$1}1'
但是生成的输出如下。
1234
A
B
C
2345
F
G
H
3456
K
L
M
感谢您的帮助。
像这样一个简单的awk过程怎么样:
$ awk -F| '{print $1 "|" $2 "n" $1 "|" $3 "n" $1 "|" $4}' file.dat
1234|A
1234|B
1234|C
2345|F
2345|G
2345|H
3456|K
3456|L
3456|M
不要干扰RS和OFS。
如果您想动态地执行此操作,那么您可以传入所需的字段数,然后使用从第二个字段开始的循环。
在脚本中,您可以首先检查字段的数量是否等于或大于您传递到脚本中的数量(在这种情况下,n=4(
awk -F| -v n=4 '
NF >= n {
for(i=2; i<=n; i++) print $1 "|" $i
}
' file
输出
1234|A
1234|B
1234|C
2345|F
2345|G
2345|H
3456|K
3456|L
3456|M
# perl -lne'($a,@b)=((split/|/)[0..3]);foreach (@b){print join"|",$a,$_}' file.dat
1234|A
1234|B
1234|C
2345|F
2345|G
2345|H
3456|K
3456|L
3456|M