Держите разделение табуляции в инкрементальной операции в определенной ячейке в таблице [duplicate]

Имейте в виду, что независимо от сценария причина всегда одинакова в .NET:

Вы пытаетесь использовать ссылочную переменную, значение которой Nothing / null. Если для ссылочной переменной значение Nothing / null, это означает, что на самом деле оно не содержит ссылку на экземпляр любого объекта, который существует в куче.

Вы либо никогда не присваивали какую-либо переменную, никогда не создавали экземпляр значения, присвоенного переменной, или вы вручную устанавливали переменную, равную Nothing / null, или вы вызывали функцию, которая установите для этой переменной значение Nothing / null.

64
задан shantanuo 21 March 2011 в 07:00
поделиться

6 ответов

Вам нужно установить переменную OFS (разделитель выходных полей) как вкладку:

echo "$line" | 
awk -v var="$mycol_new" -F $'\t' 'BEGIN {OFS = FS} {$3 = var; print}'

(убедитесь, что вы указываете переменную $line в выражении эха)

112
ответ дан glenn jackman 28 August 2018 в 18:19
поделиться

Я использую переменные FS и OFS для управления файлами зоны BIND, которые ограничены табуляцией. Вот один из моих сценариев https://gist.github.com/RichardBronosky/abe1652c2d5c78c35b92ad02bdf0d0af#file-dns_update-sh-L36-L39

Мясо:

awk -v FS='\t' -v OFS='\t' \
    -v record_type=$record_type \
    -v hostname=$hostname \
    -v ip_address=$ip_address '
$1==hostname && $3==record_type {$4=ip_address}
{print}
' $zone_file > $temp

Это простой и понятный способ сделать это.

2
ответ дан Bruno Bronosky 28 August 2018 в 18:19
поделиться

Вы можете установить полевой разделитель:

... | awk 'BEGIN {FS="\t"}; {print $1}'

Отлично читается:

https://docs.freebsd.org/info/gawk/gawk.info .Field_Separators.html

11
ответ дан John Kloian 28 August 2018 в 18:19
поделиться

Убедитесь, что они действительно являются вкладками! В bash вы можете вставить вкладку, используя C-v TAB

$ echo "LOAD_SETTLED    LOAD_INIT       2011-01-13 03:50:01" | awk -F$'\t' '{print $1}'
LOAD_SETTLED
14
ответ дан Mahmoud Abdelkader 28 August 2018 в 18:19
поделиться
echo "LOAD_SETTLED    LOAD_INIT       2011-01-13 03:50:01" | awk -v var="test" 'BEGIN { FS = "[ \t]+" } ; { print $1 "\t" var "\t" $3 }'
5
ответ дан shantanuo 28 August 2018 в 18:19
поделиться

Если это не работает?

echo "LOAD_SETTLED    LOAD_INIT       2011-01-13 03:50:01" | awk '{print $1}'
1
ответ дан Tim Castelijns 28 August 2018 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: