我有这些很长的 ID,由四个部分组成:
AKJHGFGUIKL,OIUYT,KJHBTYUI,98765434567
RTYUIKHGFGH,TYUJI,TGHYJKJKLJKL,6789876
ETRYTUUI,YTYUIL,UIOKJHGFGH,34567898766
我想将数字放在新行中并删除第三个逗号。
AKJHGFGUIKL,OIUYT,KJHBTYUI
98765434567
RTYUIKHGFGH,TYUJI,TGHYJKJKLJKL
6789876
ETRYTUUI,YTYUIL,UIOKJHGFGH
34567898766
我怎样才能做到这一点?
答案1
使用 GNU sed
:
sed "s/,/\n/3; G" file
ETRYTUUI,YTYUIL,UIOKJHGFGH
34567898766
解释
答案2
awk -F, -vOFS=, '{print $1,$2,$3; print $4; print ""}' file
将产生您想要的输出
答案3
一些 Perl 方法:
$ perl -pe 's/,([^,]+)$/\n$1\n/' file
AKJHGFGUIKL,OIUYT,KJHBTYUI
98765434567
RTYUIKHGFGH,TYUJI,TGHYJKJKLJKL
6789876
ETRYTUUI,YTYUIL,UIOKJHGFGH
34567898766
这-p
意味着“逐行读取输入文件并在应用给定的脚本后打印每一行-e
”。是s/foo/bar/
替换运算符,将替换foo
为bar
。在这里,我们匹配一个逗号,后跟一个或多个非逗号字符 ( [^,]+
),直到行尾 ( $
)。周围的括号([^,]+)
将“捕获”任何匹配的内容,因此我们可以将其引用为$1
运算符右侧的内容。因此,这将用换行符替换最后一个逗号之后的文本,然后是匹配的文本,然后是另一个换行符。
如果您不能确定第三个逗号是最后一个逗号,您可以这样做:
perl -pe 's/([^,]+,){3}\K(.+)/\n$2\n/' file
或者
perl -pe 's/(.+?,.+?,.+?),(.+)/$1\n$2\n/' file
这里还有一些,只是为了好玩:
perl -pe 's/([^,]+,){3}\K(.+)/\n$2\n/' file
perl -F, -pe '$k=pop(@F); $_=join(",", @F)."\n$k\n"' file
perl -F, -le 'print join ",", @F[0..2],"\n@F[3..$#F]\n"' file
答案4
awk -F, '{print $1, $2, $3,"\n"$4}'