sed
:
sed 's/,[^,]\+$//' file.csv
, [^,] \ +
соответствует ,
, за которым следует любое количество символов, кроме ,
, и совпадение заменяется пустой строкой awk
:
awk -F, '{for(i=1; i<NF; i++) printf("%s%s", $i, FS); print ""}' file.csv
-F,
устанавливает разделитель полей как ,
для (i = 1; i
Пример:
% cat file.txt
1,"data",100.00,TRUE
2,"code",91.8,TRUE
3,"analytics",100.00,TRUE
% sed 's/,[^,]\+$//' file.txt
1,"data",100.00
2,"code",91.8
3,"analytics",100.00
% awk -F, '{for(i=1; i<NF; i++) printf("%s%s", $i, FS); print ""}' file.txt
1,"data",100.00,
2,"code",91.8,
3,"analytics",100.00,
Не знаю, красиво ли это, но работает для всех известных мне форматов версий.
#!/bin/bash
currentver="$(gcc -dumpversion)"
requiredver="5.0.0"
if [ "$(printf '%s\n' "$requiredver" "$currentver" | sort -V | head -n1)" = "$requiredver" ]; then
echo "Greater than or equal to ${requiredver}"
else
echo "Less than ${requiredver}"
fi
( Примечание: улучшенная версия пользователя 'wildcard': https://unix.stackexchange.com/users/135943/wildcard , дополнительное условие удалено)
Раньше мы часто проверяли версии в make-файле GNU. Мы раскошелились на средства makefile. Нам пришлось на лету обнаруживать старые Binutils и компиляторы с ошибками и устранять их.
Шаблон, который мы использовали, был:
#!/usr/bin/env bash
CC=$(command -v gcc)
GREP=$(command -v grep)
# Fixup CC and GREP as needed. It may be needed on AIX, BSDs, and Solaris
if [[ -f "/usr/gnu/bin/grep" ]]; then
GREP="/usr/gnu/bin/grep"
elif [[ -f "/usr/linux/bin/grep" ]]; then
GREP="/usr/linux/bin/grep"
elif [[ -f "/usr/xpg4/bin/grep" ]]; then
GREP="/usr/xpg4/bin/grep"
fi
# Check compiler for GCC 4.8 or later
GCC48_OR_LATER=$("$CXX" -v 2>&1 | "$GREP" -i -c -E "gcc version (4\.[8-9]|[5-9]\.)")
if [[ "$GCC48_OR_LATER" -ne 0 ]];
then
...
fi
# Check assembler for GAS 2.19 or later
GAS219_OR_LATER=$("$CXX" -xc -c /dev/null -Wa,-v -o/dev/null 2>&1 | "$GREP" -c -E "GNU assembler version (2\.19|2\.[2-9]|[3-9])")
if [[ "$GAS219_OR_LATER" -ne 0 ]];
then
...
fi
Укороченная версия:
version_greater_equal()
{
printf '%s\n%s\n' "$2" "$1" | sort --check=quiet --version-sort
}
version_greater_equal "${gcc_version}" 8.2 || die "need 8.2 or above"
function version_compare () {
function sub_ver () {
local len=${#1}
temp=${1%%"."*} && indexOf=`echo ${1%%"."*} | echo ${#temp}`
echo -e "${1:0:indexOf}"
}
function cut_dot () {
local offset=${#1}
local length=${#2}
echo -e "${2:((++offset)):length}"
}
if [ -z "$1" ] || [ -z "$2" ]; then
echo "=" && exit 0
fi
local v1=`echo -e "${1}" | tr -d '[[:space:]]'`
local v2=`echo -e "${2}" | tr -d '[[:space:]]'`
local v1_sub=`sub_ver $v1`
local v2_sub=`sub_ver $v2`
if (( v1_sub > v2_sub )); then
echo ">"
elif (( v1_sub < v2_sub )); then
echo "<"
else
version_compare `cut_dot $v1_sub $v1` `cut_dot $v2_sub $v2`
fi
}
### Usage:
version_compare "1.2.3" "1.2.4"
# Output: <
Кредит принадлежит @Shellman
С помощью утилиты командной строки lastversion вы можете сравнивать любые произвольные версии, например.:
#> lastversion 1.0.0 -gt 0.9.9
#> 1.0.0
Код выхода 0, когда удовлетворяется «большее» условие.