awk 中的制表符分隔值

awk 中的制表符分隔值

https://stackoverflow.com/questions/5374239/tab-separated-values-in-awk#comment23678233_5376527 复制了确切的代码。

echo "$line" 

将返回

LOAD_SETTLED    LOAD_INIT       2011-01-13 03:50:01

现在

  1. echo "$line" | awk '{print $1}' 返回 LOAD_SETTLED
  2. echo "LOAD_SETTLED LOAD_INIT 2011-01-13 03:50:01" | awk '{print $1}'返回 LOAD_SETTLED
  3. echo "$line" | awk -v FS='\t' -v OFS='\t' 'BEGIN {OFS = FS} {$3 = var; print}'返回整行。
  4. echo "$line" | awk -v var="$mycol_new" -F'\t' 'BEGIN {OFS = FS} {$3 = var; print}'返回整行。

笔记:全线> LOAD_SETTLED LOAD_INIT 2011-01-13 03:50:01

根据上下文,我只应该期待LOAD_SETTLED,我哪里出错了?
我不确定我复制的制表符分隔符是什么。由于 Ctrl + Tab 是 PowerShell 中切换终端选项卡,我不知道如何在 WSL 中插入选项卡手册。我复制了问题中的 $line 。


是的,也许echo不适合它。

printf "LOAD_SETTLED\tLOAD_INIT\t2011-01-13 03:50:01\n" | awk -v FS='\t' -v OFS='\t' 'BEGIN {OFS = FS} {$3 = var; print}'

返回:
LOAD_SETTLED LOAD_INIT

printf "LOAD_SETTLED\tLOAD_INIT\t2011-01-13 03:50:01\n" | awk -v var="$mycol_new" -F'\t' 'BEGIN {OFS = FS} {$3 = var; print}'

返回: LOAD_SETTLED LOAD_INIT

我应该只期望LOAD_SETTLED,为什么现在返回两个字段。


原本的回答是从制表符分隔的字符串中获取第一列。我尝试复制以获得第一列。但现在我得到**两列**。这就是我的困惑。

更新:问题已解决。我的错。

答案1

可能 echo 不是用于此目的的正确工具,请尝试这个

printf "LOAD_SETTLED\tLOAD_INIT\t2011-01-13 03:50:01\n"|awk  '{print $1}'

相关内容