Острая проблема - двойные кавычки; $8
будет заменено чем-то (возможно, вообще ничего) в момент назначения переменной. Вы можете попытаться использовать одинарные кавычки с правильным экранированием, но реальное решение, вероятно, состояло бы в том, чтобы сделать глубокий вдох и начать с нуля, не имея ни eval
, ни сценария Awk в переменной.
В чем же цель этой логики кренделя? Вы, вероятно, следует читать и принимать близко к сердцу, совет в http://mywiki.wooledge.org/BashFAQ/050
Вот быстрый попытка решить вашу проблему:
#!/bin/bash
chInput=("1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "Z" "T" "G" "F" "A" "D" "P")
sampInput=("heyA")
for ((x=0;x<${#chInput[@]};x++));do
awk -F'\t' '$8=="'"${chInput[x]}"'"' /home/location/"$sampInput"_This_P.txt > "$sampInput"Ch"${chInput[x]}".txt
done
Обратите внимание, в частности, конструкция для интерполирования "${chInput[X]}"
в сценарий (это на самом деле единственное, что я изменил, фактически, кроме удаления переменной и вещей eval
). Это строка в одинарных кавычках, рядом со строкой в двойных кавычках, рядом со строкой в одинарных кавычках, которые оцениваются одной строкой в Bash. Таким образом, 'foo'"bar"'baz'
оценивает по методу foobarbaz
и аналогичным образом '"foo"'
находится рядом с "'bar'"
делает оценку "foo"'bar'
. Здесь '$8=="'
, смежный с "${chInput[x]}"
, смежный с '"'
, принимает значение $8=="..."
, где материал в двойных кавычках заменяется во время назначения.
(Вы действительно не нужен массив, или,. Вы можете просто сделать
for c in "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" \
"13" "14" "15" "16" "17" "18" "19" "Z" "T" "G" "F" \
"A" "D" "P"
do
awk -F'\t' '$8=="'"$c"'"' /home/location/"$sampInput"_This_P.txt > "${sampInput}Ch$c.txt"
done
и быть совместим с классической Bourne оболочкой)
Причины я пытался это потому, что я бегу сравнение этого файла с другим, и программа зависала в этом файле из-за его размера. Я хотел поиграть и посмотреть, могу ли я взять ленивый выход и разделить файл, а не переписать какой-то код. Я прочитал несколько статей, в которых говорилось, что это сработает, некоторые из них сказали, что это не так, и я хотел сам убедиться – Stephopolis