文件进程打印第一列的最后 2 个字符以及其余字符

文件进程打印第一列的最后 2 个字符以及其余字符

我有 11 列的输入文件,需要处理这些文件,输出第一列的最后 2 位数字并打印其余列。字段以逗号分隔。我尝试了一些命令,但没有得到正确的结果。需要一个 shell 脚本来处理这个包含更多记录的文件

输入

9303176179,989303176179,15335,A,1,9,1,0,201712091400,0,0
9303138379,989303138379,15335,A,1,9,1,0,201712091400,0,0
9302922849,989302922849,15335,A,1,9,1,0,201712091400,0,0
9334284759,989334284759,15335,A,1,9,1,0,201712091400,0,0
9334200459,989334200459,15335,A,1,9,1,0,201712091400,0,0
9334022869,989334022869,15335,A,1,9,1,0,201712091400,0,0
9334499819,989334499819,15335,A,1,9,1,0,201712091400,0,0
9334036329,989334036329,15335,A,1,9,1,0,201712091400,0,0
9303053859,989303053859,15335,A,1,9,1,0,201712091400,0,0
9302997519,989302997519,15335,A,1,9,1,0,201712091400,0,0

预期输出

79,989303176179,15335,A,1,9,1,0,201712091400,0,0
79,989303138379,15335,A,1,9,1,0,201712091400,0,0
49,989302922849,15335,A,1,9,1,0,201712091400,0,0
59,989334284759,15335,A,1,9,1,0,201712091400,0,0
59,989334200459,15335,A,1,9,1,0,201712091400,0,0
69,989334022869,15335,A,1,9,1,0,201712091400,0,0
19,989334499819,15335,A,1,9,1,0,201712091400,0,0
29,989334036329,15335,A,1,9,1,0,201712091400,0,0
59,989303053859,15335,A,1,9,1,0,201712091400,0,0
19,989302997519,15335,A,1,9,1,0,201712091400,0,0

答案1

我不知道您尝试过什么工具,但我用它sed来做这种事:

sed 's/^[^,]*\([^,][^,],.*$\)/\1/g'

您可以将其用作过滤器(sed ... <InFile >OutFile)或使用-i选项来更新要添加到运行字符串的文件名(sed -i ... InFile)。

这将搜索每一行,查找第一个逗号前的最后两个字符,使用[^,]匹配除逗号之外的任何字符。然后,它在这两个字符之前用 开始匹配字段,\(并在行末用 结束匹配字段\)。然后,此匹配字段将替换从行首开始的整个匹配表达式。

我习惯使用正则表达式,所以我发现写这个很简单,但我首先承认它们很难学。

答案2

使用cutpaste

paste -d, <(cut -f1 -d, input.csv | rev | cut -c1,2 | rev) \
          <(cut -f2- -d, input.csv)

由于cut无法从右边数出字符,我rev过去常常还原第一列中的每个数字,然后用提取前两个字符cut并还原回来。

相关内容