вы можете использовать ~для переключения верхнего и нижнего регистра,
проверьте это:
#!/bin/bash
clear
while true
do
echo ******TEST*****
read -p 'Enter a word :' word pos
if [[ ${#word} -le 1 ]] || [[ ${#word} -ge 6 ]]; then
printf "\n\tInvalid input (Min of 2 and max of 5)!.\n\n"
fi
for x in `seq 0 ${#word}`; do
c=${word:$x:1}
if [ "$x" -eq "$(($pos-1))" ]; then
printf "%s" "${c~}"
else
printf "%s" "${c}"
fi
done
printf "\n\n"
done
Сawk
:
awk 'BEGIN{ OFS="\t" } { if ($2=="NULL"){ $2=$1"2" } print }' file
Если поле $2
равно NULL
, назначьте поля $1
и "2"
полю $2
. Затем распечатайте строку.
Сsed
:
sed 's/^\([^[:blank:]]*\)\([[:blank:]]*\)NULL\([[:blank:]]*\)/\1\2\12\3/' file
Захватите первый столбец, следующий пробел и (возможный )пробел после столбца 2 в трех группах и замените на группу один, два, один + "2" и три.
С csvsql
из Python -на основеcsvkit
:
csvsql -t --query '
SELECT col1, CASE WHEN col2 IS NULL THEN col1||"2" ELSE col2 END AS col2 FROM stdin
' < file.tsv | csvformat -T
col1 col2
etc ok
something something2
category1 ok
randomtext randomtext2
С GNU sed это тривиально:
$ sed -E 's/^([^\t]+)\tNULL(\t|$)/\1\t\12\2/' file
с использованием Миллера(https://github.com/johnkerl/miller)есть
mlr --tsv put -S 'if ($col2 == "NULL") {$col2 = $col1."2"}' input.tsv