La forma moderna de verificar el estado del socket es
ss -tln
.
Las opciones para el ss son t para tcp, l para escuchar, n para numérico. Puede canalizarlo agrep 80
Идеально, есть ниже версии только awk:
find . -type f -name \*.txt -printf "%f\0" | xargs -0 -I xxxx sed -ni '
2 {
$ {
s/^[^;]*;[^;]*;[^;]*;[^;]*;\([^;]*\);\([^;]*\).*$/\1;\2/
p
q
}
s/^[^;]*;[^;]*;[^;]*;[^;]*;\([^;]*\).*$/\1/
h
}
$ {
s/^[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;\([^;]*\).*$/\1/
H
x
s/\n/;/
p
}' xxxx
Спасибо очень известному Sed - An Introduction and Tutorial by Bruce Barnett
Results:
$ cat stat01.txt
18910101;19860630
$ cat stat56.txt
18980101;19990630
$ cat stat87.txt
19010101;19661229
first version for reference
Основываясь на вашем вводе, я изобрел формат файла данных и скрипт sed для их работы.
Попробуйте:
$ find . -type f -name \*.txt -printf "%f\0" | xargs -0 -I xxxx sed -ni '
2 {
$ {
s/^[^;]*;\([^;]*\);\([^;]*\).*$/\1;\2/
p
q
}
s/^[^;]*;\([^;]*\).*$/\1/
p
}
$ {
s/^[^;]*;[^;]*;\([^;]*\).*$/\1/
p
}' xxxx
Он удаляет первую строку, содержащую заголовки.
Он сохраняет только столбец 2 первой обнаруженной строки данных и столбец 3 последней строки данных файла.
Если файл содержит только одну строку данных, он сохраняется на одной строке столбца 2 и столбца 3.
Хехехе это странно, но мне было очень весело !!!
Файлы данных в текущем каталоге:
$ cat test01.txt
Name;Price;Amount;Description
Bread;2.1;3;healthy one
$ cat test02.txt
Name;Price;Amount;Description
Water;0.0;100;For life
Wine;10.3;1;Less than half a glass a day
$ cat test03.txt
Name;Price;Amount;Description
House;1000.0;1;home
Car;500.5;0;no need
Bike;10.3;5;Good for the planet and for me
Результаты:
$ cat test01.txt
2.1;3
$ cat test02.txt
0.0
1
$ cat test03.txt
1000.0
5
Пожалуйста, предоставьте 2 коротких файла данных содержимое и ожидаемый результат,и я изменю этот ответ.
Для этого вам понадобится цикл по файлам:
for file in *.txt; do
lines=$(wc -l < "$file")
if [ "$lines" -lt 3 ]; then
echo "$file is short enough, not touching it."
else
# for testing, you can also use the -i option
sed -n '1p;$p' "$file" > "$file.new"
fi
done
Цикл необходим, если у вас есть файлы длиной всего в одну строку. С командой , заданной thrig , они появятся дважды (попробуйте echo 1 | sed -n '1p; $ p'
).
Gawk - гораздо лучший инструмент для этой задачи, чем sed. Повторение конвейера find-xargs оригинального подхода и использование той же номенклатуры выходных данных:
find . -type f -name \*.txt -printf "%f\0" | xargs -0 gawk -F\; '
FNR==2 { von = $5 }
ENDFILE { print von FS $6 > "cleaned" FILENAME }
'
Код стал намного проще, намного понятнее, и, несомненно, более удобным для сопровождения.