使用linux命令打开制表符分隔文件

时间:2014-03-21 16:49:40

标签: excel sed awk grep delimiter

我很难打开制表符分隔文件。客户端说它肯定是制表符分隔,但似乎没有文本限定符。

我正在运行此声明:

 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           |
+-----------------------------------------------------------------------+

我不相信这些列是正确的“标签”:

enter image description here

这是文件的纯文本示例:

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)实现它: enter image description here

  

制表符分隔符可能不会排列。选项卡字符已定义   不同的操作系统。通常它被定义为   显示时有4或5个空格。所以如果你的艺术家名字是5   字符,然后是标签字符,然后标题将从   字符位置9.如果下一行,艺术家是20个字符   长,然后是制表符,然后标题会出现在位置   24.希望这会有所帮助。 (另一个想法,告诉用户在Excel中打开一个空白电子表格并使用文本导入)

非常感谢你的指导!

2 个答案:

答案 0 :(得分:0)

这应该做:

awk 'BEGIN {FS=OFS="\t"} NR<=10 {print $1,$2,$10,$12,$14,$20}' AECPRDA.TAB

答案 1 :(得分:0)

我已经解决了!

而不是使用这种制表符:"\t"

我需要使用$'\t'

我没有找到有关原因的文档。

最终答案:

awk -F$'\t' 'BEGIN{OF=OFS}{print $1,$2,$10,$12,$14,$20}' AECPRDA.TAB | head -10