Как я могу обнаружить, является ли мой ЦП 32 или 64 битами?

Основная команда

Этот ответ использует тот же подход, что и ответ Индера , но внутри одной команды awk, которая могла бы быть быстрее. Не то чтобы это имело значение в этом случае ... Здесь мы предполагаем, что файл, указанный в вашем примере, в качестве входных данных, см. Следующий раздел для альтернативных форматов ввода.

awk 'NR>1 { system("mkdir -p dir"$2"; mv "$1"-* dir"$2) }' dataframe.csv

В вашем примере это выполняет следующие команды bash:

mkdir -p dir0
mv abc-* dir0
mkdir -p dir0
mv def-* dir0
mkdir -p dir2
mv abg-* dir2
mkdir -p dir1
mv poc-* dir1
mkdir -p dir4
mv qrs-* dir4

Опция -p в mkdir не вызовет ошибку, если каталог уже существует. С помощью mv abc-* dir0 мы перемещаем все файлы, начиная с abc-, в каталог dir0.

Использование вашего фактического формата ввода

Из комментариев кажется, что ваш фактический файл имеет другой формат, чем пример, который вы показали нам. В примере столбцы были разделены пробелами

animal    class
abc        0
def        0
abg        2
...

, но ваш реальный файл выглядит как настоящий csv со столбцами, разделенными запятыми. Кроме того, файл, кажется, имеет окончания строки Windows (\r\n вместо \n).

animal,class\r
abc,0\r
def,0\r
abg,2\r
...

Вы можете использовать этот формат, адаптируя специальные переменные awk FS (для разделителя полей) и RS (для разделителя записей):

awk -F, -v RS='\r?\n' 'NR>1 { system("mkdir -p dir"$2"; mv "$1"-* dir"$2) }' dataframe.csv
11
задан paxdiablo 5 May 2009 в 13:49
поделиться

9 ответов

Windows, C / C ++:

#include <windows.h>

SYSTEM_INFO sysInfo, *lpInfo;
lpInfo = &sysInfo;
::GetSystemInfo(lpInfo);
switch (lpInfo->wProcessorArchitecture) {
case PROCESSOR_ARCHITECTURE_AMD64:
case PROCESSOR_ARCHITECTURE_IA64:
    // 64 bit
    break;
case PROCESSOR_ARCHITECTURE_INTEL:
    // 32 bit
    break;
case PROCESSOR_ARCHITECTURE_UNKNOWN:
default:
    // something else
    break;
}
20
ответ дан 3 December 2019 в 01:53
поделиться

C #, независимая от ОС

sizeof(IntPtr) == 4 ? "32-bit" : "64-bit"

Это несколько грубо, но в основном говорит вам, работает ли CLR 32-битным или 64-битным, что, скорее всего, вам нужно знать. Например, CLR может работать как 32-разрядный на 64-разрядном процессоре.

Дополнительную информацию см. Здесь: Как обнаружить 64-разрядную платформу Windows с .NET?

8
ответ дан 3 December 2019 в 01:53
поделиться

Сложность в том, что у вас может быть 64-битный ЦП, но 32-битная ОС. Если вам небезразличен этот случай, для запроса процессора потребуется заглушка asm. Если нет, вы можете легко спросить ОС.

4
ответ дан 3 December 2019 в 01:53
поделиться

То, что вы сделали, вполне разумно. Несколько дополнительных пунктов:

  • Когда Maven получает артефакт от Nexus, артефакт именуется как artifactId-версия. GroupId досадно опущен. Таким образом, когда артефакт перемещается (скажем, копируется в WEB-INF / lib в веб-приложении), ваш файл jar будет читать « gdata-analytics-1.0 ». Это обычно не проблема. Однако, если имя артефакта очень распространено, например «util», вы можете включить информацию о группе в artifactId, например, используя groupId из « com.google » и artifactId из « com.google.gdata-аналитика ». Да, повторение раздражает, но обеспечивает максимальную ясность в файловой системе и при поиске. У меня действительно была проблема, когда два разных идентификатора группы имели "

0
ответ дан 3 December 2019 в 01:53
поделиться

В Python:

In [10]: import platform
In [11]: platform.architecture()
Out[11]: ('32bit', 'ELF')

Как обычно, довольно аккуратно. Но я почти уверен, что эти функции возвращают платформу, на которой был создан exec, а не платформы, на которых он работает. Все еще есть небольшая вероятность, что какой-нибудь компьютерный компьютер использует 32-битную версию на 64-битном компьютере.

Вы можете получить дополнительную информацию, например:

In [13]: platform.system()
Out[13]: 'Linux'

In [19]: platform.uname()
Out[19]: 
('Linux',
 'asus-u6',
 '2.6.28-11-generic',
 '#42-Ubuntu SMP Fri Apr 17 01:57:59 UTC 2009',
 'i686',
 '')

ETC.

Это больше похоже на данные в реальном времени: -)

1
ответ дан 3 December 2019 в 01:53
поделиться

В .NET вы можете отличить x86 от x64, посмотрев на свойство Size структуры IntPtr. Свойство IntPtr.Size возвращается в байтах, по 8 бит на байт, поэтому оно равно 4 для 32-разрядного ЦП и 8 для 64-разрядного ЦП. Поскольку мы говорим о 32-битных и 64-битных процессорах, а не о 4-байтовых или 8-байтовых процессорах, мне нравится проводить сравнение в битах, чтобы прояснить, что происходит.

C #

if( IntPtr.Size * 8 == 64 )
{
    //x64 code
}

PowerShell

if( [IntPtr]::Size * 8 -eq 64 )
{
    #x64 code 
}
2
ответ дан 3 December 2019 в 01:53
поделиться

VBScript, Windows:

Const PROCESSOR_ARCHITECTURE_X86 = 0
Const PROCESSOR_ARCHITECTURE_IA64 = 6
Const PROCESSOR_ARCHITECTURE_X64 = 9

strComputer = "."

Set oWMIService = GetObject("winmgmts:" & _
    "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colProcessors = oWMIService.ExecQuery("SELECT * FROM Win32_Processor")

For Each oProcessor In colProcessors
  Select Case oProcessor.Architecture
    Case PROCESSOR_ARCHITECTURE_X86
      ' 32-bit
    Case PROCESSOR_ARCHITECTURE_X64, PROCESSOR_ARCHITECTURE_IA64
      ' 64-bit
    Case Else
      ' other
  End Select
Next

Другое возможное решение для Windows Script Host, на этот раз в JScript и с использованием переменной среды PROCESSOR_ARCHITECTURE:

var oShell = WScript.CreateObject("WScript.Shell");
var oEnv = oShell.Environment("System");
switch (oEnv("PROCESSOR_ARCHITECTURE").toLowerCase())
{
  case "x86":
    // 32-bit
  case "amd64":
    // 64-bit
  default:
    // other
}
1
ответ дан 3 December 2019 в 01:53
поделиться

Код C #:

int size = Marshal.SizeOf(typeof(IntPtr));
if (size == 8)
{
 Text = "64 bit";
}
else if (size == 4)
{
 Text = "32 bit";
}
0
ответ дан 3 December 2019 в 01:53
поделиться

В Linux вы можете определить "разрядность", прочитав

/proc/cpuinfo

, например.

cat /proc/cpuinfo | grep flags

, если он содержит флаг

lm

, это 64-разрядный процессор x86 (даже если у вас установлен 32-разрядный Linux)

Не уверен, работает ли это с процессорами, отличными от x86, такими как PPC или ARM.

0
ответ дан 3 December 2019 в 01:53
поделиться
Другие вопросы по тегам:

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