【发布时间】:2023-04-07 19:40:01
【问题描述】:
我很难打开制表符分隔的文件。客户说它肯定是制表符分隔的,但似乎没有文本限定符。
我正在运行这个语句:
awk '{OF=OFS="\t"}{print $1,$2,$10,$12,$14,$20}' AECPRDA.TAB | head -10
以及我得到的输出:
+-----------------------------------------------------------------------+
| 22746528 BKEN48DVD NEVER 050 R N |
| 22746535 BKEN48BR NEVER 050 R N |
| 25584998 WD1194190DVD DTS) / DOL 29.99 |
| 21548598 DSND001906102.2 / 001 11.49 8 |
| 25812794 WHV1000292717BR / 050 PG13 N |
| 25812787 WHV1000284958DVD SPEC GRAVITY / PG13 |
| 21425462 PBSDMST64400DVD SEASON (3PC) CLASSIC: 050 |
| 25584974 WD1194170BR (WS DTS DIGC) AC3 |
| 21388262 HBO1000394029DVD 3 OF SEASON 59.98 |
| 25688450 WD11955700DVD / DOL) THE 050 |
+-----------------------------------------------------------------------+
我不相信这些列是正确的“标签”:
这是文件的纯文本示例:
22746528 BKEN48DVD AW40 48 18 METALLICA (2PC) THROUGH THE NEVER (2PC) 050 090 R 12.99 19.98 85611500487 01/28/2014 N N 30 1 A 1 11/27/2013 01/24/2014 11/27/2013 11/27/2013
22746535 BKEN48BR AW40 48 BR METALLICA (2PC) THROUGH THE NEVER (2PC) 050 090 R 16.25 24.98 85611500488 01/28/2014 N N 30 1 A 2 11/27/2013 01/24/2014 11/27/2013 11/27/2013
25584998 WD1194190DVD 0819 1194190 18 FROZEN / (WS DOL DTS) FROZEN / (WS DOL DTS) 050 110 G 21.25 29.99 78693683896 03/18/2014 N N 0 2 A 3 12/20/2013 03/20/2014 12/20/2013 12/20/2013
21548598 DSND001906102.2 0107 001906102 02 FROZEN / O.S.T. FROZEN / O.S.T. 001 024 11.49 13.95 05008729574 11/25/2013 N N 8 1 E 4 10/07/2013 03/20/2014 10/07/2013 10/07/2013
25812794 WHV1000292717BR 0526 1000292717 BR GRAVITY / (UVDC) GRAVITY / (UVDC) 050 093 PG13 29.49 35.99 88392924457 02/25/2014 N N 30 1 E 5 01/16/2014 02/11/2014 01/16/2014 01/16/2014
我的 AWK 命令有什么问题吗?为什么标签设置不正确?是否有我遗漏的隐藏“空格”限定符?
这是我从某人那里得到的解释,但我想使用 AWK NOT excel 来实现它(gd forbid):
制表符分隔可能不会对齐。制表符已定义 在不同的操作系统中有所不同。通常定义为 显示时有 4 或 5 个空格。所以如果你的艺术家名字是 5 字符,然后是制表符,然后标题将从 字符位置 9. 如果下一行艺术家是 20 个字符 长,然后是制表符,然后标题将出现在位置 24. 希望这会有所帮助。 (另一个想法,告诉用户在 excel 中打开一个空白电子表格并使用文本导入)
非常感谢您的指导!
【问题讨论】:
-
我不太了解
{OF=OFS="\t"}部分。不应该是BEGIN{FS=OFS="\t"}将输入输出字段分隔符设置为制表符吗? -
如果您“不相信这些列是正确的制表符”,那么它并不是真正的制表符分隔文件,您需要了解您的输入格式实际上是什么以及是否可以形式化(可能使用正则表达式)。
-
请看我的更新,我认为现在应该更清楚了,但我不知道如何实现它
-
如果你不信,试着数一数每一行的字段数:
awk -F '\t' '{print NF}' filename -
这是一个巨大的痛苦,excel打开这个没有问题,但是awk没有,我不明白
标签: excel sed awk grep delimiter