linux - 如何在 AWK 中将字段分隔符设置为 ^@(特殊字符)?

标签 linux awk

我有这种格式的记录。

^@343453^@145562998^@1001^@1KDI03K^@1802282^@10^@118543r221^@10^@1k2FOOD^@1NB^@1^@4554545^@3444545^@1STD^@45454554^@1NORMAL^@1^@1^@1^@1CDIH^@1^@12PY567

这里的字段分隔符是^@,文件一共有73个字段

我试过了

awk -F "^@" ' { print $1} ' file.txt;
awk -F "\^\@" ' { print $1} ' file.txt;

但我无法将我的字段分开,我将整个记录作为输出。

正确的做法是什么?

最佳答案

您需要在字段分隔符中对 ^ 进行两次转义。为什么需要转义它,因为它具有特殊含义,因此要将其视为文字字符,请使用此字符。

awk -F'\\^@' '{print $2}'  Input_file

您的第一个字段是空的,因此无法打印,因此要通过显示的示例了解您的字段编号及其值,您可以尝试执行以下命令以更好地理解它们。

awk -F'\\^@' '{for(i=1;i<=NF;i++){print "field Number:"i " field value is:" $i}}' Input_file

您的示例的几行将是:

field Number:1 field value is:
field Number:2 field value is:343453
field Number:3 field value is:145562998
field Number:4 field value is:1001
field Number:5 field value is:1KDI03K

关于linux - 如何在 AWK 中将字段分隔符设置为 ^@(特殊字符)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67294970/

相关文章:

linux - 如何将软件及其依赖项打包为一个二进制文件

linux - sed 提取数字 : how to replace non-numeric characters with a single space?

android - Eons 类在 android 中被调用?

linux - 如何使用 awk 中的文本来 cat 系统 ("pwd") 的输出?

linux - 了解 Linux oom-killer 的日志

sql - 从 SQL/关系代数类比到 *nix 命令行过滤器/工具

linux - 括号内的grep内容

regex - sed regex 匹配多个字段和值,包括引号

linux - 有人能解释一下为什么 awk 的 sub()/gsub() 是这样工作的吗?

linux - 如何理解unix中的 `if [ ! -f $R_C_S_L/j_r_d* ] ...`?