awk -вывести второй столбец, если в 4 и 5 столбцах есть совпадающие слова

Создайте файл с именем something.desktop и добавьте следующий код. Если вы знакомы с командами запуска «something.desktop», в терминале будут перечислены все файлы в домашнем каталоге.

И обязательно сделайте исполняемый файл something.desktop. Чтобы сделать любой файл исполняемым, код-

chmod +x /path/to/your/something.desktop

Отредактируйте его со своими значениями

[Desktop Entry]
Type=Application
Name=IPT
GenericName=IPT
Comment=IPT Desktop icon developed by Mritunjay
Categories=Network;Security;
X-KeepTerminal=true
Icon=/usr/img/ip.png
Exec=gnome-terminal --tab --title="List files" --command="bash -c '/home; ls; $SHELL'"

NoDisplay=true

Надеюсь, это поможет!!

-2
27.04.2021, 21:15
2 ответа

для фильтрации оснований строк в столбце

awk '$4 == "ABC" && $5 == "DEF" ' 

для печати только поля 2

awk '$4 == "ABC" && $5 == "DEF" { print $2} ' 

с несколькими условиями

awk '$4 == "ABC" && $5 == "DEF" { print $2} 
     $4 == "XYZ" && $5 == "GHI" { print $2} ' 

строки, не соответствующие условию, будут игнорироваться, дополнительные не нужныgrep -v


перенаправление и переменная

обратите внимание, что ${datafile.txt}не будет расширяться доdatafile.txt

используйте либо

awk '... ' input.txt > output.txt

или

input="Datafile.txt"
output="Exportfile.txt"
awk '...' ${input} > ${output}

вы можете заключить переменную в кавычки, если есть специальный символ

awk '...' "${input}" > "${output}"
1
28.04.2021, 22:50
awk '(($4 " " $5 == "ABD POF") ||
      ($4 " " $5 == "ABG POE") ||
      ($4 " " $5 == "ABK POJ") ||
      ($4 " " $5 == "ABT POB")) { print $2 }' DataFile.txt > exportfile.txt

Это немного упрощает задачу, сравнивая конкатенацию $4 и $5 с конкатенацией двух строк из 3 -букв, с которыми вы хотите сопоставить их.

Он также устраняет 3 из 4 повторяющихся блоков кода в ответе Арчемара (, то есть{print $2}). См. Don't Repeat Yourself для краткого обзора того, почему рекомендуется избегать нескольких копий одного и того же кода в одной и той же программе.


Если вы были абсолютно уверены, что во входных данных не было комбинаций из 4 и 5 долларов, таких как ABD и либо POE, либо POJ, либо POB и т. д., которые вы не хотите сопоставить, вы могли бы использовать одно совпадение с регулярным выражением вместо четырех фиксированных -строковых совпадений:

awk '$4 " " $5 ~ /^AB[DGKT] PO[FEJB]$/ {print $2}' DataFile.txt  > exportfile.txt

Это будет соответствовать всем комбинациям AB, за которыми следуют либо D,G,K, либо T и PO, за которыми следует F,E,J или B, а не только 4 перечисленные вами комбинации.

1
28.04.2021, 22:50

Теги

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