小编Ala*_*key的帖子

使用 awk/sed 将字段切割成一定长度

我有一大堆文件,其中包含几个以管道分隔的字段。

5595340959340|1|MXPYAQWE|870569689456954654|0|0|20181018224126| 1212121212121212121212121212 |2|0|1000|70|33107||1|事件 5595340959340|1|MXPYAQWE|870569689456950465216|10|812 2323232323232323232323232323 |2|0|1000|70|33107||1|事件 5595340959340|1|MXPYAQWE|870569689456950465216|10|210 3434343434343434343434343434 |2|0|1000|70|33107||1|事件 5595340959340|1|MXPYAQWE|870569689456950465216|10|210 4545454545454545454545454545 |2|0|1000|70|33107||1|事件5595340959340|1|MXPYAQWE|870569689456950465216|10|210 5656565656565656565656565656 |2|0|1000|70|33107||1|事件

注意第八个字段。它目前有 29 个字符,我应该修剪它,所以它只剩下五个字符了。

我想出的唯一(令人费解的)解决方案是:

隔离我要修剪的字段:

awk -F "|" '{print $8}' > Original_Fields
Run Code Online (Sandbox Code Playgroud)

修剪字段

cp Original_Fields Temp
more Temp | cut -c -5 > Trimmed_Fields
Run Code Online (Sandbox Code Playgroud)

用 sed 创建一个替换脚本

grep -rh -f <file_with_matching_strings> /path/to/files > Original_Strings
vi Original_Strings
:%s/^/grep -rl "/g
:%s/$/" \/path\/to\/file | xargs sed -i 's\//g
:wq!
Run Code Online (Sandbox Code Playgroud)

然后编辑 Original_Fields 和 Trimmed_Fields 文件,所以我最终得到

grep -rl /path/to/file | xargs sed -i 's/Original_Field/Trimmed_Field/g'
Run Code Online (Sandbox Code Playgroud)

这有效,但我强烈怀疑必须有一种更快的方法来使用 AWK 和 SED 来完成此操作,因此我只需一步即可完成所有这些操作。

sed awk text-processing

5
推荐指数
1
解决办法
1012
查看次数

使用 awk 将 1 秒添加到 yyyymmddhhmmss

我有这个文件,其中第七个字段是 yyyymmddhhmmss。我需要将这个数字增加一秒。

到目前为止,我已经想出了:

awk 'BEGIN{FS=OFS="|"} $7=$7+1 ' <file> 
Run Code Online (Sandbox Code Playgroud)

它有点工作,但是......如果第七个字段的最后两位数字是“59”,它显然会替换为“60”。

有什么方法可以让 awk 知道该字段是日期,这样我就可以将整个列增加一秒?

当前文件

09099458|1|000|41181|0|0|20221130164738|67
82060649|1|000|36827|0|0|20221130172359|67
Run Code Online (Sandbox Code Playgroud)

预期结果

09099458|1|000|41181|0|0|20221130164739|67
82060649|1|000|36827|0|0|20221130172400|67  <- From 17:23:59 to 17:24:00
Run Code Online (Sandbox Code Playgroud)

提前致谢。

awk time replace

0
推荐指数
1
解决办法
160
查看次数

标签 统计

awk ×2

replace ×1

sed ×1

text-processing ×1

time ×1