Shell

awk 也可以將欄位標識符用於 shell 字元串(變數)嗎?

  • October 6, 2019

好吧,這顯然是我嘗試的方式不可能。

這種獲取bar作為結果字元串的替代方法是有效的,但是:

#!/bin/bash

path1=/usr/tmp/foo/bar/baz

awk -F/ '{print $5}' <<< "$path1"

到目前為止一切都很好,但是如果我想在沒有<<<操作員和那些臭名昭著的echo | ...管道的情況下做些什麼呢?簡而言之,我想要做的是path1作為變數與-v pa="$path1"指令一起傳遞,使用欄位分隔符-F/和欄位標識符(例如$5)來解析awk-內部 pa變數,該變數的值是從外部 path1shell 變數分配的。這也可以在“內部”完成awk嗎?

-v選項或var=value參數的問題awk在於它們不能用於任意數據,因為 ANSI C 轉義序列(如\n, \b…)在其中擴展(如果值以 GNU awk4.2 或更高版本開頭,則@/並以 結尾/,它被視為變數的正則表達式類型)。

另一種方法是使用ARGVorENVIRON awk數組:

awk -F / 'BEGIN{$0 = ARGV[1]; print $5}' "$path1"

或者:

export path1
awk -F / 'BEGIN{$0 = ENVIRON["path1"]; print $5}'

或者:

path1="$path1" awk -F / 'BEGIN{$0 = ENVIRON["path1"]; print $5}'

現在,如果你想要的只是拆分一個 shell 變數,你可能不需要awk.

在所有 POSIX shell 中:

IFS=/; set -f
set -- $path1
printf '%s\n' "$5"

引用自:https://unix.stackexchange.com/questions/87367