Заменить содержимое определенных ячеек в tsv-файле отредактированным содержимым других ячеек

вы можете использовать ~для переключения верхнего и нижнего регистра,

проверьте это:

#!/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
-1
19.09.2019, 04:18
4 ответа

С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" и три.

3
28.01.2020, 05:06

С 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
2
28.01.2020, 05:06

С GNU sed это тривиально:

$ sed -E 's/^([^\t]+)\tNULL(\t|$)/\1\t\12\2/' file
1
28.01.2020, 05:06

с использованием Миллера(https://github.com/johnkerl/miller)есть

mlr --tsv put -S 'if ($col2 == "NULL") {$col2 = $col1."2"}' input.tsv
3
28.01.2020, 05:06

Теги

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